Over time, processor technology has advanced such that modern processors often include multiple cores, along with associated circuitry such as one or more cache levels to store recently used or frequently accessed information, memory controllers and so forth. Software has also advanced such that much software is written to take advantage of the multi-threading capabilities of modern processors.
One type of multiprocessor is a chip multiprocessor (CMP) in which multiple cores are present and multiple threads can execute concurrently on one or more of these cores. Originally, such chip multiprocessors were of a symmetrical design such that each core was of the same architecture and the corresponding caches were also of the same size. However, a trend has emerged to incorporate heterogeneous resources in a processor.